home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_b / rmdsk2.asm < prev    next >
Assembly Source File  |  1995-04-22  |  11KB  |  457 lines

  1.          .TAB 11,15,27 
  2.          .SET 1,7 
  3.          .TITLE "RAMDISK FOR FMS VERSION 2             05-25-85" 
  4. ********* ZERO PAGE ********** 
  5. RTCLKL   =   $14 
  6. BUFRL    =   $32     ;SIO ZPG, CAN USE 
  7. BFENL    =   $34     ;SIO ZPG, CAN USE 
  8. ******** OTHER RAM *********** 
  9. INITAD   =   $02E2 
  10. DVSTAT   =   $02EA 
  11. DRVBYT   =   $070A   ;DRIVE BITS 
  12. SASA     =   $070C   ;END FMS CODE 
  13. DSIO4    =   $07A2   ;FMS 2 SIO CALL 
  14. FMSINIT  =   $07E0 
  15. DIHCL    =   $0816   ;FMS 2 NORM STAT CALL 
  16. WRTDOS   =   $120A   ;FMS 2 WRITE DOS ENTRY 
  17. ERDVDC   =   $12BF   ;FMS INVALID CMD ERR 
  18. TSTLC    =   $4000   ;EXTRA RAMS 
  19. VTOCP    =   $7200   ;XRAM VTOC 
  20. RDIHCL   =   $E536   ;DOSXL.XL STAT CALL 
  21. ********** OS ROM ************* 
  22. DHADR    =   $E453   ;OS RES DISK 
  23. SIOV     =   $E459   ;SIO ENTRY ADDR 
  24. ********* CONSTANT ************ 
  25. RAMDRV   =   4       ;DRIVE # OF RAMDISK 
  26. ****** I/O REGISTERS ********** 
  27. PORTB    =   $D301 
  28. NMIEN    =   $D40E 
  29. *********** DCB *************** 
  30. DDEVIC   =   $0300   ;SERIAL BUS ID 
  31. DUNIT    =   $0301   ;UNIT NUMBER 
  32. DCOMND   =   $0302   ;COMMAND 
  33. DSTATS   =   $0303   ;DIRECTION/STATUS 
  34. DBUFLO   =   $0304   ;BUF ADDR LO 
  35. DBUFHI   =   $0305   ;         HI 
  36. DAUX1    =   $030A   ;DEVICE INFO (SECT LO) 
  37. DAUX2    =   $030B   ;  "     "   (     HI) 
  38. ******                 ********* 
  39. ****** RAMDISK HANDLER ********* 
  40. ******                 ********* 
  41.          *=  $3800   ;WILL RELOCATE 
  42. ; SIO CALL TO HERE 
  43. SECIO    LDA DUNIT 
  44.          CMP #RAMDRV 
  45.          BEQ SECIO1 
  46.          JMP SIOV 
  47. SECIO1   LDA DAUX2   ;HI SECT 
  48.          CMP #2 
  49.          BCC TGSEC   ;IN RANGE 
  50.          BNE BDSEC   ;RIDICULOUS 
  51.          LDA DAUX1 
  52.          CMP #4 
  53.          BCC TGSEC   ;BR IF < 516 
  54. BDSEC    LDY #144 
  55.          STY DSTATS 
  56.          RTS  
  57. TGSEC    LDA DAUX2 
  58.          BNE NRMSC   ;BR IF SEC> 255 
  59. TSCLO    LDA DAUX1 
  60.          CMP #4      ;HI WAS ZERO 
  61.          BCS NRMSC   ;DO TRANS IF 4+ 
  62.          LDY #1 
  63.          STY DSTATS  ;ELSE LIE 
  64.          RTS  
  65. NRMSC    SEC         ;READY TRANSFER 
  66.          LDA DAUX1   ;SECTOR LO 
  67.          SBC #4 
  68.          STA BFENL   ;RAMDISK 4 THRU 515 
  69.          LDA DAUX2 
  70.          SBC #0 
  71.          ASL BFENL   ;EXTRA RAM PG UPPER 
  72.          ROL A       ;2 BITS 
  73.          ASL A 
  74.          ASL A 
  75.          STA BFENL+1 ;AT BITS 2 AND 3 
  76.          LDX RTCLKL 
  77. WVLP     CPX RTCLKL 
  78.          BEQ WVLP    ;WAIT 'TIL END VBLANK 
  79.          LDA #0 
  80.          STA NMIEN   ;TURN OFF NMI 
  81.          SEI         ;     AND IRQ 
  82.          LDA PORTB   ;MEM CONTROL 
  83.          TAX         ;NORM IN X 
  84.          AND #$E3 
  85.          ORA BFENL+1 
  86.          PHA         ;RMDSK ON STACK 
  87.          LDA BFENL   ;SECT # REMAINDER 
  88.          SEC         ;+ $40 (WILL BE) 
  89.          ROR A 
  90.          LSR A       ;LSB TO C 
  91.          STA BFENL+1 ;IS HIGH ADDR 
  92.          LDA #0 
  93.          ROR A       ;SECT LSB = 128 BYTES 
  94.          STA BFENL 
  95.          LDA DBUFLO 
  96.          STA BUFRL   ;SET I/O ADDRESS 
  97.          LDA DBUFHI 
  98.          STA BUFRL+1 
  99.          LDY #127 
  100.          LDA DSTATS 
  101.          BMI SCWRT   ;BR IF 'TO DISK' 
  102. SECRD    PLA         ;ELSE 
  103.          PHA  
  104.          STA PORTB   ;RMDSK 
  105.          LDA (BFENL),Y ;IS SOURCE 
  106.          STX PORTB   ;NORM 
  107.          STA (BUFRL),Y ;IS DEST 
  108.          DEY  
  109.          BPL SECRD 
  110.          BMI SCDON 
  111. SCWRT    PLA         ;FOR WRITE, 
  112.          STX PORTB 
  113.          TAX         ;SWAP SO THAT 
  114.          LDA PORTB 
  115.          PHA  
  116. SCWT1    PLA  
  117.          PHA  
  118.          STA PORTB   ;NORM 
  119.          LDA (BUFRL),Y ;IS SOURCE 
  120.          STX PORTB   ;RMDSK 
  121.          STA (BFENL),Y ;IS DEST 
  122.          DEY  
  123.          BPL SCWT1 
  124.          TXA  
  125.          AND #$0C 
  126.          CMP #8      ;VTOC BANK? 
  127.          BNE SCDON   ;BR NO 
  128.          LDX #1 
  129.          CPX VTOCP+2 ;TEST MAXSEC HI 
  130.          BEQ SCDON   ;ASSUME OK 
  131.          LDA VTOCP+3 
  132.          SBC #707-504 ;ALSO BORROW 
  133.          BCS SCWT2 
  134.          DEC VTOCP+4 
  135.          BPL SCWT2 
  136.          LDA #0 
  137.          STA VTOCP+4 
  138. SCWT2    STA VTOCP+3 ;FREE SECTS 
  139.          STX VTOCP+2 
  140.          LDA #$F7 
  141.          STA VTOCP+1 ;& MAX SECTS 
  142. SCDON    PLA         ;FIX STACK 
  143.          LDA PORTB 
  144.          AND #$E3 
  145.          ORA #$1C 
  146.          STA PORTB   ;NORM 
  147.          LDA #$C0 
  148.          STA NMIEN   ;ENABLE NMI 
  149.          CLI         ;   AND IRQ 
  150.          LDA #0 
  151.          LDY #1 
  152.          STY DSTATS  ;AFFIRM GOOD 
  153.          RTS  
  154. SCIOLN   =   *-SECIO 
  155. ********* DRIVE STATUS ******** 
  156. DRSTAT   LDA DUNIT 
  157.          CMP #RAMDRV 
  158.          BEQ RMSTA 
  159.          JMP DHADR 
  160. RMSTA    LDA #0 
  161.          STA DVSTAT 
  162.          STA DVSTAT+1 
  163.          STA DVSTAT+3 
  164.          LDY #1 
  165.          STY DVSTAT+2 ;128 BYTE SECTS 
  166.          RTS  
  167. RELEN    =   *-SECIO ;RELOCATE LENGTH 
  168. *****                      ***** 
  169. ***** INSTALLATION ROUTINE ***** 
  170. *****                      ***** 
  171. INSTALL  LDA DSIO4+1 ;SIO CALL? 
  172.          CMP # <SIOV 
  173.          BNE NOPE 
  174.          LDA DSIO4+2 
  175.          CMP # >SIOV 
  176.          BNE NOPE 
  177. ******* 130XE TEST ********* 
  178.          LDA PORTB 
  179.          TAX         ;SAVE NORM CONFIG 
  180.          AND #$EF 
  181.          TAY         ;SAVE EXTRA CONFIG 
  182.          STY PORTB 
  183.          LDA TSTLC   ;GET EXTRA BYTE 
  184.          STX PORTB   ;SET NORM 
  185.          CMP TSTLC 
  186.          BNE CNTIN   ;BR IF EXTRA 
  187.          LDA TSTLC 
  188.          EOR #$FF    ;COMPLEMENT NORM 
  189.          STA TSTLC 
  190.          STY PORTB   ;SET EXTRA 
  191.          CMP TSTLC 
  192.          PHP         ;SAVE COMPARE RESULT 
  193.          STX PORTB 
  194.          EOR #$FF    ;UNCOMPLEMENT 
  195.          STA TSTLC   ;& REPAIR NORM 
  196.          PLP  
  197.          BNE CNTIN   ;BR IF EXTRA 
  198. NOPE     JMP NONE 
  199. CNTIN    LDA DIHCL+1 ;NORM V2 STAT CALL? 
  200.          CMP # <DHADR 
  201.          BNE NOTLO 
  202.          LDA DIHCL+2 
  203.          CMP # >DHADR 
  204.          BEQ DS2LO   ;IF SO, CAN INSTALL 
  205. NOTLO    LDA #0      ;ELSE DOSXL.XL STAT CALL? 
  206.          LDX RTCLKL 
  207. IVBLP    CPX RTCLKL 
  208.          BEQ IVBLP 
  209.          STA NMIEN 
  210.          SEI  
  211.          LDA PORTB 
  212.          AND #$FE 
  213.          STA PORTB 
  214.          LDA RDIHCL+1 
  215.          CMP # <DHADR 
  216.          BNE NOTFN 
  217.          LDA RDIHCL+2 
  218.          CMP # >DHADR 
  219.          BNE NOTFN 
  220.          JSR COPYDOWN ;YES...DO MOVE 
  221.          LDA DRSADR  ;& REPLACE STAT CALL 
  222.          STA RDIHCL+1 
  223.          LDA DRSADR+1 
  224.          STA RDIHCL+2 
  225.          LDA PORTB 
  226.          ORA #1 
  227.          STA PORTB 
  228.          LDA #$C0 
  229.          STA NMIEN 
  230.          CLI  
  231.          JMP D2HAV 
  232. NOTFN    LDA PORTB   ;NO, JUST BACK TO OS 
  233.          ORA #1 
  234.          STA PORTB 
  235.          LDA #$C0 
  236.          STA NMIEN 
  237.          CLI         ;INTS ENABLED 
  238. NONE     RTS         ;AND OUT 
  239. DS2LO    JSR COPYDOWN ;LO FOUND 
  240.          LDA DRSADR 
  241.          STA DIHCL+1 ;REPLACE STAT CALL 
  242.          LDA DRSADR+1 
  243.          STA DIHCL+2 
  244.          LDA #$4C    ;JMP INSTRUCTION 
  245.          STA WRTDOS 
  246.          LDA # <ERDVDC ;TO INVALID CMD 
  247.          STA WRTDOS+1 
  248.          LDA # >ERDVDC ;DISABLES DOS WRITE 
  249.          STA WRTDOS+2 
  250. D2HAV    CLC         ;EITHER, 
  251.          LDA SASA 
  252.          ADC # <RELEN ;ADD INSTALLED LENGTH 
  253.          STA SASA    ;TO END FMS VALUE 
  254.          LDA SASA+1 
  255.          ADC # >RELEN 
  256.          STA SASA+1 
  257.          JSR FMSINIT ;& REINIT FMS 
  258. ******* FORMAT 'DISK' ******** 
  259.          LDX RTCLKL 
  260. FMT      CPX RTCLKL 
  261.          BEQ FMT     ;WAIT VBL 
  262.          LDA #0 
  263.          STA NMIEN 
  264.          SEI         ;DISABLE INTS 
  265.          LDA PORTB 
  266.          AND #$E3 
  267.          PHA  
  268.          ORA #8 
  269.          STA PORTB   ;VTOC BANK 
  270.          LDX #0 
  271.          LDA $7200   ;1ST VTOC BYTE 
  272.          CMP #2 
  273.          BEQ VTST2 
  274.          INX  
  275. VTST2    LDA $7201   ;2ND 
  276.          CMP #$F7 
  277.          BEQ VTST3 
  278.          INX  
  279. VTST3    LDA $7202   ;3RD 
  280.          CMP #1 
  281.          BEQ VTSTN 
  282.          INX  
  283. VTSTN    PLA  
  284.          CPX #0 
  285.          BEQ FMTDN   ;OUT, PREVIOUSLY DONE 
  286. FLP1     STA PORTB 
  287.          LDA #$40 
  288.          STA BUFRL+1 
  289.          TAX  
  290.          LDA #0 
  291.          STA BUFRL 
  292.          TAY  
  293. FLP2     STA (BUFRL),Y ;CLEAR ALL DISK 
  294.          INY  
  295.          BNE FLP2 
  296.          INC BUFRL+1 
  297.          DEX  
  298.          BNE FLP2 
  299.          CLC  
  300.          LDA PORTB 
  301.          ADC #4 
  302.          PHA  
  303.          AND #$0C 
  304.          BEQ FCDON 
  305.